// 1、写功能
// 2、写空函数
// 3、把1放到2中
// 4、形参返回值

import { http } from '@kit.NetworkKit'
import { Options } from '../model/ApiType'

const baseURL = 'http://123.56.141.187:8001'


// export const post = (options) => {
// export const post = (options):Promise<any> => {
export const post = <T>(options: Options): Promise<T> => {

  console.log('token', AppStorage.get('token'))

  const { path='', header={}, data={} } = options

  const httpRequest = http.createHttp()
  const p = httpRequest.request(baseURL + path, {
    method: http.RequestMethod.POST,
    header: {
      // 默认的配置
      // token: AppStorage.get('token'),
      authorization: AppStorage.get('token'),
      // 自定义配置  如果也有token则自定义覆盖默认
      ...header,
    },
    extraData: data
  })
  return p.then(res => {
    if (res.responseCode === 200) {
      const serverData = JSON.parse(res.result as string)
      // console.log(serverData)
      // 方案1：写死逻辑
      return serverData
    }
  })

  // 方案2：返回给其他人使用  切记promise里面是什么数据取决于上一个then返回值
  // return p
}


// const onTest = () => { // 返回 number
//   return 1
// }
//
// const onTest2 = () => { // 返回 Promise<未知>
//   return new Promise((resolve, reject) => {
//     resolve(666)
//   })
// }
//
// const onTest3 = () => { // 返回 Promise<未知>
//   return new Promise((resolve, reject) => {
//     resolve({ a: 1, b: 2 })
//   })
// }
//
// // const onTest4 = (): Promise<any> => {
// const onTest4 = (): Promise<{
//   a: number,
//   b: number
// }> => {
//   return new Promise((resolve, reject) => {
//     resolve({ a: 1, b: 2 })
//   })
// }


// const ref = (data:number | string) => {
// const ref = <收>(data:T) => {
// }
// ref<传>()


export const get = <T>(options): Promise<T> => {

  const { path='', header={} } = options

  const httpRequest = http.createHttp()
  const p = httpRequest.request(encodeURI(baseURL + path), {
    method: http.RequestMethod.GET,
    header: {
      authorization: AppStorage.get('token'),
      ...header
    },
    // extraData: data
  })
  return p.then(res => {
    if (res.responseCode === 200) {
      const serverData = JSON.parse(res.result as string)
      // console.log(serverData)
      // 方案1：写死逻辑
      return serverData
    }
  })
  //   .catch(err => {
  //   console.log('http error ', JSON.stringify(err))
  // })

  // 方案2：返回给其他人使用  切记promise里面是什么数据取决于上一个then返回值
  // return p
}

